<?php

namespace app\admin\controller;

use app\model\BizAdminModel;
use app\model\AdminModel;
use app\model\UserModel;
use support\Request;
use support\Response;
use Exception;

class BizAdminController
{
    /**
     * 获取商家管理员列表
     * @param Request $request
     * @return Response
     */
    public function index(Request $request): Response
    {
        try {
            $bizId = $request->get('biz_id');
            
            if (empty($bizId)) {
                throw new Exception('商家ID不能为空');
            }

            $list = BizAdminModel::query()
                ->select('biz_admin.*', 'user.phone','user.nickname')
                ->leftJoin('user', 'biz_admin.user_id', '=', 'user.id')
                ->where('biz_admin.biz_id', $bizId)
                ->orderBy('biz_admin.created_at', 'desc')
                ->get();

            foreach ($list as &$item) {
                $item['created_at'] = date('Y-m-d H:i:s', $item->created_at);
                $item['updated_at'] = date('Y-m-d H:i:s', $item->updated_at);
            }

            return json([
                'data' => $list,
                'msg' => '获取成功',
                'code' => 20000
            ]);
        } catch (Exception $e) {
            return json([
                'data' => null,
                'msg' => $e->getMessage(),
                'code' => 0
            ]);
        }
    }

    /**
     * 添加商家管理员
     * @param Request $request
     * @return Response
     */
    public function submit(Request $request): Response
    {
        try {
            $data = $request->post();

            if (empty($data['biz_id'])) {
                throw new Exception('商家ID不能为空');
            }

            if (empty($data['user_id'])) {
                throw new Exception('用户ID不能为空');
            }

            // 检查管理员是否存在
            $admin = UserModel::find($data['user_id']);
            if (!$admin) {
                throw new Exception('管理员不存在');
            }

            // 检查是否已经是该商家的管理员
            if(!empty($data['id'])){
                $existingAdmin = BizAdminModel::where('biz_id', $data['biz_id'])
                ->where('user_id', $data['user_id'])
                ->where('id','!=',$data['id'])
                ->first();
            }else{
                $existingAdmin = BizAdminModel::where('biz_id', $data['biz_id'])
                ->where('user_id', $data['user_id'])
                ->first();
            }
            
            
            if ($existingAdmin) {
                throw new Exception('该管理员已经是此商家的管理员');
            }

            // 判断是新建还是编辑
            if (!empty($data['id'])) {
                $bizAdmin = BizAdminModel::find($data['id']);
                if (!$bizAdmin) {
                    throw new Exception('商家管理员记录不存在');
                }
            } else {
                $bizAdmin = new BizAdminModel();
                $bizAdmin->biz_id = $data['biz_id'];
                $bizAdmin->user_id = $data['user_id'];
                $bizAdmin->created_at = time();
                
                // 如果是第一个管理员，设置为super角色
                $adminCount = BizAdminModel::where('biz_id', $data['biz_id'])->count();
                $bizAdmin->role = $adminCount === 0 ? 'super' : 'normal';
            }

            $bizAdmin->role = $data['role'] ?? $bizAdmin->role;
            $bizAdmin->status = $data['status'] ?? 1;
            $bizAdmin->updated_at = time();

            if (!$bizAdmin->save()) {
                throw new Exception(empty($data['id']) ? '添加失败' : '更新失败');
            }

            return json([
                'data' => $bizAdmin,
                'msg' => empty($data['id']) ? '添加成功' : '更新成功',
                'code' => 20000
            ]);
        } catch (Exception $e) {
            return json([
                'data' => null,
                'msg' => $e->getMessage(),
                'code' => 0
            ]);
        }
    }

    /**
     * 删除商家管理员
     * @param Request $request
     * @return Response
     */
    public function delete(Request $request): Response
    {
        try {
            $id = $request->post('id');
            
            if (empty($id)) {
                throw new Exception('参数错误');
            }

            $bizAdmin = BizAdminModel::find($id);
            if (!$bizAdmin) {
                throw new Exception('商家管理员记录不存在');
            }

            // 超级管理员不能删除
            if ($bizAdmin->role === 'super') {
                throw new Exception('超级管理员不能删除');
            }

            if (!$bizAdmin->delete()) {
                throw new Exception('删除失败');
            }

            return json([
                'data' => null,
                'msg' => '删除成功',
                'code' => 20000
            ]);
        } catch (Exception $e) {
            return json([
                'data' => null,
                'msg' => $e->getMessage(),
                'code' => 0
            ]);
        }
    }

    /**
     * 更新管理员状态
     * @param Request $request
     * @return Response
     */
    public function updateStatus(Request $request): Response
    {
        try {
            $id = $request->post('id');
            $status = $request->post('status');
            
            if (empty($id)) {
                throw new Exception('参数错误');
            }

            if (!in_array($status, [0, 1])) {
                throw new Exception('状态值无效');
            }

            $bizAdmin = BizAdminModel::find($id);
            if (!$bizAdmin) {
                throw new Exception('商家管理员记录不存在');
            }

            // 超级管理员不能禁用
            if ($bizAdmin->role === 'super' && $status === 0) {
                throw new Exception('超级管理员不能禁用');
            }

            $bizAdmin->status = $status;
            $bizAdmin->updated_at = time();

            if (!$bizAdmin->save()) {
                throw new Exception('更新失败');
            }

            return json([
                'data' => $bizAdmin,
                'msg' => '状态更新成功',
                'code' => 20000
            ]);
        } catch (Exception $e) {
            return json([
                'data' => null,
                'msg' => $e->getMessage(),
                'code' => 0
            ]);
        }
    }

    /**
     * 获取所有管理员列表（用于选择）
     * @param Request $request
     * @return Response
     */
    public function getAllAdmins(Request $request): Response
    {
        try {
            $bizId = $request->get('biz_id');
            
            if (empty($bizId)) {
                throw new Exception('商家ID不能为空');
            }

            // 获取已经是该商家管理员的所有用户ID
            $existingUserIds = BizAdminModel::where('biz_id', $bizId)
                ->pluck('user_id')
                ->toArray();

            // 获取所有管理员，排除已经是该商家管理员的
            $admins = AdminModel::query()
                ->select('id', 'username')
                ->whereNotIn('id', $existingUserIds)
                ->where('status', 1) // 只获取正常状态的管理员
                ->orderBy('id', 'desc')
                ->get();

            return json([
                'data' => $admins,
                'msg' => '获取成功',
                'code' => 20000
            ]);
        } catch (Exception $e) {
            return json([
                'data' => null,
                'msg' => $e->getMessage(),
                'code' => 0
            ]);
        }
    }
} 